#pragma once
#ifndef NEXT_H
#define NEXT_H
#include "spa_types.h"
#include <map>
#include <set>
#include <vector>

#include <boost/dynamic_bitset.hpp>
#include <boost/unordered_map.hpp>

using namespace boost;
class Next
{
private: 
	set<PROG_LINE> HelperGetTransitive(set<PROG_LINE>,int);
public:
	Next();
	~Next();
	//set<map<PROG_LINE,PROG_LINE>> next_store;
	boost::unordered_map<PROG_LINE,PROG_LINE_ARRAY> next_store;
	boost::unordered_map<PROG_LINE,PROG_LINE_ARRAY> prev_store;
	void InsertNext(PROG_LINE,PROG_LINE);
	set<PROG_LINE> VectorToSet(vector<PROG_LINE>);
	PROG_LINE_ARRAY GetPrevious(PROG_LINE);
	PROG_LINE_ARRAY GetNext(PROG_LINE);
	PROG_LINE_ARRAY GetTransitiveNext(PROG_LINE);
	PROG_LINE_ARRAY GetTransitivePrevious(PROG_LINE);
	BOOLEAN IsNext(PROG_LINE,PROG_LINE);
	BOOLEAN IsTransitiveNext(PROG_LINE,PROG_LINE);
};
#endif